// /*
//  * @Description: 
//  * @Author: wangchao
//  * @Date: 2023-02-07 15:34:57
//  */
// // 场景：数据可视化中，很多情况下都会以日期为横坐标，数据为纵坐标展示折线图，但接口下发的数据不一定是连续的
// // 接口返回如下数据(数据已经按照日期由早到晚排序)
// const data = [
//   { date: '2019-12-28', cnt: 12 },
//   { date: '2020-03-11', cnt: 12 },
//   // { date: '2022-03-02', cnt: 12 },
//   // { date: '2021-12-28', cnt: 7 },
//   // { date: '2021-12-30', cnt: 9 },
//   // { date: '2022-01-02', cnt: 4 },
//   // { date: '2022-01-03', cnt: 4 }
// ]
// // data.splice(1,0,{date: `111`, cnt: 0})

// const DATE_MAP_FUNC = (year,month)=>{
  
//   let data = {
//     '1': 31,
//     '2': 28,
//     '3': 31,
//     '4': 30,
//     '5': 31,
//     '6': 30,
//     '7': 31,
//     '8': 31,
//     '9': 30,
//     '10': 31,
//     '11': 30,
//     '12': 31,
//   }
//   if (judgeRunYear(year)) {
//     data[2] = 29
//   } else {
//     data[2] = 28

//   }
//   return data[month]
// }

// // 请写一个函数 pathDate()补全缺失的日期数据（默认为0即可），效果如下：
// const result = pathDate(data)
// console.log(result);
// // result 结果为：
// // [
// //   {date: '2021-12-25', cnt: 12},
// //   {date: '2021-12-26', cnt: 0}, // 新增
// //   {date: '2021-12-27', cnt: 0}, // 新增
// //   {date: '2021-12-28', cnt: 7},
// //   {date: '2021-12-29', cnt: 0}, // 新增
// //   {date: '2021-12-30', cnt: 9},
// //   {date: '2021-12-31', cnt: 0}, // 新增
// //   {date: '2022-01-01', cnt: 0}, // 新增
// //   {date: '2022-01-02', cnt: 4},
// //   {date: '2022-01-03', cnt: 4}
// // ]


// function judgeRunYear(year) {
//   return year % 4 == 0 && year % 100 != 0 || year % 400 == 0
// }
// function fix(data) {
//   return data < 10 ? `0${data}` : data
// }
// function calcMinus(data, slow, fast) {
//   let dates1 = data[slow].date.split('-')
//   let dates2 = data[fast].date.split('-')
//   let year1 = dates1[0] * 1
//   let month1 = dates1[1] * 1
//   let day1 = dates1[2] * 1

//   let year2 = dates2[0] * 1
//   let month2 = dates2[1] * 1
//   let day2 = dates2[2] * 1

//   // 1. 同年同月不同日
//   if (year1 == year2 && month1 == month2) {
//     while (day1 < day2 - 1) {
//       data.splice(++slow, 0, { date: `${year1}-${fix(month1)}-${fix(++day1)}`, cnt: 0 })
//     }
//   }
//   // 2. 同年不同月
//   if (year1 == year2 && month1 != month2) {
//     // 2-1.先把小月所在最大日补齐
//     let day1Max = DATE_MAP_FUNC(year1,month1)
//     while (day1 < day1Max) {
//       data.splice(++slow, 0, { date: `${year1}-${fix(month1)}-${fix(++day1)}`, cnt: 0 })
//     }
//     // 2-2 差距月份纯补齐
//     while (++month1 < month2) {
//       let dayMax = DATE_MAP_FUNC(year1,month1)
//       let dayOne = 0
//       while (dayOne < dayMax) {
//         data.splice(++slow, 0, { date: `${year1}-${fix(month1)}-${fix(++dayOne)}`, cnt: 0 })
//       }
//     }
//     // 2-3.把大月所在日补齐
//     let day2Min = 0
//     while (day2Min < day2 - 1) {
//       data.splice(++slow, 0, { date: `${year1}-${fix(month2)}-${fix(++day2Min)}`, cnt: 0 })
//     }

//   }

//   // 3. 不同年
//   if (year1 != year2) {
//     // 3-1 小年纯补齐
//     let monthMax = 12
//     let dayMax = DATE_MAP_FUNC(year1,12)
//     if (monthMax !== month1 || dayMax !== day1) {
//       data.splice(slow + 1, 0, { date: `${year1}-${fix(monthMax)}-${fix(dayMax)}`, cnt: 0 })
//       let nf = calcMinus(data, slow, fast)
//       slow = nf
//       fast = nf + 1
//     }
//     // 3-2 大年纯补齐
//     if (1 !== month2 || 1 !== day2) {
//       data.splice(slow + 1, 0, { date: `${year2}-${fix(1)}-${fix(1)}`, cnt: 0 })
//     }
//   }

//   return slow + 1
// }
// function pathDate(data) {
//   let slow = 0, fast = 1
//   while (fast < data.length) {
//     const newFast = calcMinus(data, slow, fast)
//     slow = newFast
//     fast = newFast + 1
//   }
//   return data
// }


const data = [
  {
    date: "2020-02-21",
    cnt: 12,
  },
  {
    date: "2020-03-11",
    cnt: 2,
  },
  // {
  //   date: "2021-12-21",
  //   cnt: 2,
  // },
  // {
  //   date: "2022-01-01",
  //   cnt: 1,
  // },
  // {
  //   date: "2022-01-11",
  //   cnt: 9,
  // },
];

const pathDate = (data) => {
  const oneDayTime = 1000 * 60 * 60 * 24;
  const fillData = [];
  function formatDate(date) {
    date = new Date(date);
    const year = date.getFullYear(),
      month = ("0" + (date.getMonth() + 1)).slice(-2),
      sdate = ("0" + date.getDate()).slice(-2),
      hour = ("0" + date.getHours()).slice(-2),
      minute = ("0" + date.getMinutes()).slice(-2),
      second = ("0" + date.getSeconds()).slice(-2);
    // 拼接
    const result = year + "-" + month + "-" + sdate;
    // 返回
    return result;
  }
  data = data.map((item) => {
    return {
      ...item,
      date: new Date(item.date).getTime(),
    };
  });
  data.forEach((item) => {
    if (!fillData.length) {
      fillData.push(item);
    } else {
      const diffTime = item.date - fillData[fillData.length - 1].date;
      if (diffTime > oneDayTime) {
        const arr = new Array(diffTime / oneDayTime - 1)
          .fill(undefined)
          .map((v, i) => {
            return {
              date: fillData[fillData.length - 1].date + (i + 1) * oneDayTime,
              cnt: 0,
            };
          });
        fillData.push(...arr, item);
      } else {
        fillData.push(item);
      }
    }
  });
  return fillData.map((item) => {
    return {
      ...item,
      date: formatDate(item.date),
    };
  });
};
console.log(pathDate(data));